window: Add gtk_widget_class_set_css_name()
authorBenjamin Otte <otte@redhat.com>
Mon, 7 Sep 2015 19:37:07 +0000 (21:37 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 22 Oct 2015 14:42:48 +0000 (16:42 +0200)
This is to replace using class names as CSS names.

docs/reference/gtk/gtk3-sections.txt
gtk/gtkwidget.c
gtk/gtkwidget.h

index d6274d75f5e1a9636c771e1bfd849f3c79d4fbef..360a69c7e868858d5802f0550cc3ff54baa7c7ca 100644 (file)
@@ -5602,6 +5602,8 @@ gtk_widget_get_action_group
 gtk_widget_get_path
 gtk_widget_get_style_context
 gtk_widget_reset_style
+gtk_widget_class_get_css_name
+gtk_widget_class_set_css_name
 
 <SUBSECTION>
 gtk_requisition_new
index 4ae6e2b15c339e083c33708c7502fb09691a20fb..df34d1068be6ad7642916bf06f369a00d50a67e0 100644 (file)
@@ -487,6 +487,7 @@ struct _GtkWidgetClassPrivate
   GtkWidgetTemplate *template;
   GType accessible_type;
   AtkRole accessible_role;
+  const char *css_name;
 };
 
 enum {
@@ -4365,7 +4366,10 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
   priv->cssnode = gtk_css_widget_node_new (widget);
   gtk_css_node_set_state (priv->cssnode, GTK_STATE_FLAG_DIR_LTR);
   /* need to set correct type here, and only class has the correct type here */
-  gtk_css_node_set_widget_type (priv->cssnode, G_TYPE_FROM_CLASS (g_class));
+  if (GTK_WIDGET_GET_CLASS (widget)->priv->css_name)
+    gtk_css_node_set_name (priv->cssnode, GTK_WIDGET_GET_CLASS (widget)->priv->css_name);
+  else
+    gtk_css_node_set_widget_type (priv->cssnode, G_TYPE_FROM_CLASS (g_class));
 
   G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
   priv->style = gtk_widget_get_default_style ();
@@ -16312,6 +16316,47 @@ gtk_widget_clear_path (GtkWidget *widget)
   g_object_set_qdata (G_OBJECT (widget), quark_widget_path, NULL);
 }
 
+/**
+ * gtk_widget_class_set_css_name:
+ * @widget_class: class to set the name on
+ * @name: name to use
+ *
+ * Sets the name to be used for CSS matching of widgets. 
+ *
+ * If this function is not calles for a given class, the name
+ * of the parent class is used.
+ **/
+void
+gtk_widget_class_set_css_name (GtkWidgetClass *widget_class,
+                               const char     *name)
+{
+  GtkWidgetClassPrivate *priv;
+
+  g_return_if_fail (GTK_IS_WIDGET_CLASS (widget_class));
+  g_return_if_fail (name != NULL);
+
+  priv = widget_class->priv;
+
+  priv->css_name = g_intern_string (name);
+}
+
+/**
+ * gtk_widget_class_get_css_name:
+ * @widget_class: class to set the name on
+ *
+ * Gets the name used by this class for matching in CSS code. See 
+ * gtk_widget_class_set_css_name() for details.
+ *
+ * Returns: the CSS name of the given class.
+ */
+const char *
+gtk_widget_class_get_css_name (GtkWidgetClass *widget_class)
+{
+  g_return_val_if_fail (GTK_IS_WIDGET_CLASS (widget_class), NULL);
+
+  return widget_class->priv->css_name;
+}
+
 void
 _gtk_widget_style_context_invalidated (GtkWidget *widget)
 {
index c725fcba8caa092c34e03609c6be8e1635765f9d..6aeda831d441339bf4ff3f16769b4d455f039552 100644 (file)
@@ -1302,6 +1302,12 @@ GtkStyleContext * gtk_widget_get_style_context (GtkWidget *widget);
 GDK_AVAILABLE_IN_ALL
 GtkWidgetPath *   gtk_widget_get_path (GtkWidget *widget);
 
+/*GDK_AVAILABLE_IN_3_20*/
+void              gtk_widget_class_set_css_name (GtkWidgetClass *widget_class,
+                                                 const char     *name);
+/*GDK_AVAILABLE_IN_3_20*/
+const char *      gtk_widget_class_get_css_name (GtkWidgetClass *widget_class);
+
 GDK_AVAILABLE_IN_3_4
 GdkModifierType   gtk_widget_get_modifier_mask (GtkWidget         *widget,
                                                 GdkModifierIntent  intent);